package br.com.redejava.ciep.negocio;

import java.util.ArrayList;
import java.util.List;

public class URE extends Unidade {
	private URE ureMaisProxima;
	private List<Integer> histSolicitacoesLoja;

	public URE() {
		this.histSolicitacoesLoja = new ArrayList<Integer>();
	}

	public void addHistSolicLoja(Integer quantidade) {
		this.histSolicitacoesLoja.add(quantidade);
	}

	public Integer getMediaSolicitaces(Integer quantidadeDefault) {
		Integer quantidadeMedia = Produto.QTD_MIN_PRODUTO;
		for (int i=0; i<=2; i++) {
			if (i < this.histSolicitacoesLoja.size()) {
				quantidadeMedia += this.histSolicitacoesLoja.get(i);
			} else {
				quantidadeMedia += 0;
			};
		};
		return (int) Math.ceil((double) quantidadeMedia/3);
	}

	public URE getUreMaisProxima() {
		return ureMaisProxima;
	}

	public void setUreMaisProxima(URE ureMaisProxima) {
		this.ureMaisProxima = ureMaisProxima;
	}

	public void solicitarQuantidadeURE(String produtoNome, Integer quantidade) {
		this.addHistSolicUnidade(produtoNome, quantidade);

		Integer quantidade_ = quantidade;
		quantidade = this.ureMaisProxima.getProduto(produtoNome).subtrairQuantidade(quantidade);

		if (quantidade > Produto.QTD_MIN_PRODUTO) {
			this.getProduto(produtoNome).getFornecedor().reporEstoque(this, produtoNome, quantidade);
		};

		if (this.ureMaisProxima.getProduto(produtoNome).getQuantidade() == Produto.QTD_MIN_PRODUTO) {
			if (quantidade > Produto.QTD_MIN_PRODUTO) {
				this.ureMaisProxima.solicitarQuantidadeURE(produtoNome, this.ureMaisProxima.getMediaSolicitaces(quantidade));
			} else {
				this.ureMaisProxima.getProduto(produtoNome).getFornecedor().reporEstoque(this.ureMaisProxima, produtoNome, quantidade);
			};
		};

		if (quantidade == Produto.QTD_MIN_PRODUTO) {
			this.getProduto(produtoNome).incrementarQuantidade(quantidade_);
		};
	};
}
